﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;


public partial class Proyectos : System.Web.UI.Page
{
    string nombreModulo = "Proyectos";

    static IDictionary<string, string> backUps = new Dictionary<string, string>();


    private static bool modificando = false;

    static bool permitirInsertar = false;
    static bool permitirModificar = false;
    static bool permitirEliminar = false;

    System.Drawing.Color colorExito = System.Drawing.Color.YellowGreen;

    private ProyectosCtrl ctrlProyecto = new ProyectosCtrl();
    private AtributosCtrl permitidos = new AtributosCtrl();

    static List<IteracionEnt> IteracionesDatos;

    static IteracionEnt iterSelected;

    protected void Page_Init(object sender, EventArgs e)
    {
        
        cargarPerfilDeAcceso();
        if (!(bool)Session["ProyectosConsultar"])
        {
            Response.Redirect("Cuentas.aspx");
        }
        
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        
        Master.colorChange(7);

        if (!IsPostBack)//Al inicio de cargar
        {

            Eliminar_Button.Attributes.Add("onclick", "javascript:return confirm('¿Seguro que desea Eliminar?')");

            permitidos = ctrlProyecto.SolicitarEstadoAtributos();

            Activar_Desactivar_Campos(permitidos.Defecto.Campos);
            Activar_Desactivar_Opciones(permitidos.Defecto.Insertar, permitidos.Defecto.Modificar, permitidos.Defecto.Eliminar, permitidos.Defecto.Aceptar, permitidos.Defecto.Cancelar);

            actualizarGrid(); 
            Limpiar_Campos();
        }
        else//Cada vez que se actualiza
        {

        }
        cargarPerfilDeAcceso();
        //GridEntregables.Columns[0].Visible = false;
        
    }

    private void cargarPerfilDeAcceso()
    {

        permitirInsertar = (bool)Session[nombreModulo + "Insertar"];
        permitirModificar = (bool)Session[nombreModulo + "Modificar"];
        permitirEliminar = (bool)Session[nombreModulo + "Eliminar"];
    }

    private void actualizarGrid()
    {
        if((bool)Session["Perfil"])
        {
            GridProyecto.DataSource = ctrlProyecto.ActualizarGrid();
        }
        else
        {
            GridProyecto.DataSource = ctrlProyecto.ActualizarGrid((int)Session["Id"]);
        }
        
        GridProyecto.DataBind();
        Lider_Select.ClearSelection();
        Lider_Select.Items.Clear();
        Lider_Select.DataSource = ctrlProyecto.ObtenerEmpleados();
        Lider_Select.DataBind();



        Cliente_Select.Items.Clear();
        Cliente_Select.DataSource = ctrlProyecto.ObtenerClientes();
        Cliente_Select.DataBind();


        Estado_DropDownList.Items.Clear();
        Estado_DropDownList.DataSource = ctrlProyecto.ObtenerEstados();
        Estado_DropDownList.DataBind();



        Complejidad_Select.Items.Clear();
        Complejidad_Select.DataSource = ctrlProyecto.ObtenerComplejidad();
        Complejidad_Select.DataBind();


    }

    protected void Activar_Desactivar_Campos(bool activar)
    {
        
        foreach (Control cntrl in Panel_Primario.Controls)
        {
                Activar_Desactivar_Elemento(activar, (cntrl));
        }
        foreach (Control cntrl in View1.Controls)
        {
                Activar_Desactivar_Elemento(activar, (cntrl));
        }
        foreach (Control cntrl in View2.Controls)
        {
                Activar_Desactivar_Elemento(activar, (cntrl));
        }
        foreach (Control cntrl in View3.Controls)
        {
                Activar_Desactivar_Elemento(activar, (cntrl));
        }

        Asignar_Button.Enabled = activar;
        Remover_Button.Enabled = activar;

        
    }

    protected void Activar_Desactivar_Elemento(bool activar, Control ele)
    {
        
        if (ele.GetType() == typeof(DropDownList))
        {
            DropDownList elemento = (DropDownList)ele;
            if (!activar)
            {

                if (Iteracion_DropDownList.Equals(elemento))
                {
                    elemento.CssClass = "deshabilitado";
                    elemento.ForeColor = System.Drawing.Color.Black;
                }
                else
                {
                    elemento.Enabled = activar;
                    elemento.CssClass = "entradaDeshabilitado";
                    elemento.ForeColor = System.Drawing.Color.Black;
                }

            }
            else
            {

                    elemento.CssClass = "";
                    elemento.Enabled = activar;

            }
        }
        else
        {
            if (ele.GetType() == typeof(TextBox))
            {
                TextBox elemento = (TextBox)ele;
                if (!activar)
                {
                    if (!elemento.ReadOnly)
                    {
                        elemento.CssClass = "deshabilitado";
                        elemento.ReadOnly = !activar;
                    }
                }
                else
                {
                    if (elemento.CssClass == "deshabilitado")
                    {
                        elemento.CssClass = "";
                        elemento.ReadOnly = !activar;
                    }


                }
            }
            else 
            { 
                if (ele.GetType() == typeof(ListBox))
                {
                    ListBox elemento = (ListBox)ele;
                    if (!activar)
                    {


                            elemento.Enabled = activar;
                            elemento.CssClass = "deshabilitado";
                            elemento.ForeColor = System.Drawing.Color.Black;

                    }
                    else
                    {

                        elemento.CssClass = "";
                        elemento.Enabled = activar;

                    }
                }
            }
            
        }

         
    }



    protected void Activar_Desactivar_Opciones(bool insertar, bool modificar, bool eliminar, bool aceptar, bool cancelar)
    {
        
        Insertar_Button.Visible = permitirInsertar;
        Insertar_Button.Enabled = insertar;


        Modificar_Button.Visible = permitirModificar;
        Modificar_Button.Enabled = modificar;

        Eliminar_Button.Visible = permitirEliminar;
        Eliminar_Button.Enabled = eliminar;

        Estructuracion_Button.Enabled = eliminar;


        Aceptar_Button.Enabled = aceptar;


        Cancelar_Button.Enabled = cancelar;
        
    }

    protected void Limpiar_Campos()
    {
        foreach (Control cntrl in Panel_Primario.Controls)
        {
            Limpiar_Elemento(cntrl);
        }
        foreach (Control cntrl in View1.Controls)
        {
            Limpiar_Elemento(cntrl);
        }
        foreach (Control cntrl in View2.Controls)
        {
            Limpiar_Elemento(cntrl);
        }
        foreach (Control cntrl in View3.Controls)
        {
            Limpiar_Elemento(cntrl);
        }

    }

    protected void Limpiar_Elemento(Control ele)
    {
        if (ele.GetType() == typeof(TextBox))
        {
            TextBox elemento = (TextBox)ele;
            elemento.Text = "";
        }
        else
        {
            if (ele.GetType() == typeof(DropDownList))
            {
                DropDownList elemento = (DropDownList)ele;
                if (Iteracion_DropDownList.Equals(elemento))
                {
                    elemento.Items.Clear();
                }
                else 
                { 

                }
                
            }
            else
            {
                if (ele.GetType() == typeof(ListBox))
                {
                    ListBox elemento = (ListBox)ele;
                    elemento.Items.Clear();
                    ctrlProyecto.LimpiarListaRecursosHumanos();                    
                }
            }
        }
    }

    protected void Respaldar_Campos()
    {
        backUps.Clear();
        foreach (Control cntrl in Panel_Primario.Controls)
        {
            Respaldar_Elemento(cntrl);
        }
        foreach (Control cntrl in View1.Controls)
        {
            Respaldar_Elemento(cntrl);
        }
        foreach (Control cntrl in View2.Controls)
        {
            Respaldar_Elemento(cntrl);
        }
        foreach (Control cntrl in View3.Controls)
        {
            Respaldar_Elemento(cntrl);
        }
    }

    protected void Respaldar_Elemento(Control ele)
    {
        if (ele.GetType() == typeof(TextBox))
        {
            TextBox elemento = (TextBox)ele;
            backUps.Add(elemento.ID, elemento.Text);
        }
        else
        {
            if (ele.GetType() == typeof(DropDownList))
            {
                DropDownList elemento = (DropDownList)ele;
                backUps.Add(elemento.ID, elemento.Text);
            }
        }

        
        
    }

    protected void Recuperar_Campos()
    {
        foreach (Control cntrl in Panel_Primario.Controls)
        {
            Recuperar_Elemento(cntrl);
        }
        foreach (Control cntrl in View1.Controls)
        {
            Recuperar_Elemento(cntrl);
        }
        foreach (Control cntrl in View2.Controls)
        {
            Recuperar_Elemento(cntrl);
        }
        foreach (Control cntrl in View3.Controls)
        {
            Recuperar_Elemento(cntrl);
        }
        Disponibles_ListBox.DataSource = ctrlProyecto.CargarEmpleadosDisponibles();
        Disponibles_ListBox.DataBind();
        Asignados_ListBox.DataSource = ctrlProyecto.CargarEmpleadosAsignados();
        Asignados_ListBox.DataBind();

    }

    protected void Recuperar_Elemento(Control ele)
    {


        if (ele.GetType() == typeof(TextBox))
        {
            TextBox elemento = (TextBox)ele;
            elemento.Text = backUps[elemento.ID];
        }
        else
        {
            if (ele.GetType() == typeof(DropDownList))
            {
                DropDownList elemento = (DropDownList)ele;
                elemento.ClearSelection();
                if (Estado_DropDownList.Equals(elemento))
                {
                    elemento.Text = backUps[elemento.ID];
                }
                else 
                {
                    elemento.Items.FindByText(backUps[elemento.ID]);
                }
            }
        }
    }

    protected void Insertar_Button_Click(object sender, EventArgs e)
    {
        
        Error_Label.Text = "Estado: ¡Insertando!";
        Error_Label.BackColor = System.Drawing.Color.Gainsboro;

        Activar_Desactivar_Campos(permitidos.Insertando.Campos);
        Activar_Desactivar_Opciones(permitidos.Insertando.Insertar, permitidos.Insertando.Modificar, permitidos.Insertando.Eliminar, permitidos.Insertando.Aceptar, permitidos.Insertando.Cancelar);

        Limpiar_Campos();

        Disponibles_ListBox.DataSource = ctrlProyecto.CargarEmpleadosDisponibles();
        Disponibles_ListBox.DataBind();

        Fecha_TextBox.Text = DateTime.Today.ToString();
        modificando = false;

        
    }

    protected void Modificar_Button_Click(object sender, EventArgs e)
    {
        
        Error_Label.Text = "Estado: ¡Modificando!";
        modificando = true;
        Error_Label.BackColor = System.Drawing.Color.Gainsboro;
        //backup de datos por si cancela o error
        Respaldar_Campos();

        Activar_Desactivar_Campos(permitidos.Modificando.Aceptar);
        Activar_Desactivar_Opciones(permitidos.Modificando.Insertar, permitidos.Modificando.Modificar, permitidos.Modificando.Eliminar, permitidos.Modificando.Aceptar, permitidos.Modificando.Cancelar);
        
    }

    protected void Eliminar_Button_Click(object sender, EventArgs e)
    {
        
        ctrlProyecto.EliminarProyecto();
        Error_Label.Text = "Estado: ¡Eliminado!";
        Error_Label.BackColor = colorExito;

        Activar_Desactivar_Campos(permitidos.Defecto.Campos);
        Activar_Desactivar_Opciones(permitidos.Defecto.Insertar, permitidos.Defecto.Modificar, permitidos.Defecto.Eliminar, permitidos.Defecto.Aceptar, permitidos.Defecto.Cancelar);

        Limpiar_Campos();
        actualizarGrid();
        
    }

    
    protected void Aceptar_Button_Click(object sender, EventArgs e)
    {

        bool resultado = false;
        string lidertemp = Lider_Select.SelectedItem.ToString();
        string complejidadtemp = Complejidad_Select.SelectedItem.ToString();
        string clientetemp = Cliente_Select.SelectedItem.ToString();
        string estadotemp = Estado_DropDownList.Text;

        try
        {
            Convert.ToDateTime( Fecha_TextBox.Text);
        }
        catch (Exception )
        {
            Fecha_TextBox.Text = DateTime.Today.ToString();
           
        }

        if(modificando) 
        {  
            if( Iteracion_DropDownList.SelectedItem.Text != "")
                ctrlProyecto.ModificarIteracionTemp(iterSelected.Id.ToString(), PFSA_Alb_TextBox.Text, PFSA_Gar_TextBox.Text, horas_pers_mes_TextBox.Text);
            else
                ctrlProyecto.ModificarIteracionTemp("-1", PFSA_Alb_TextBox.Text, PFSA_Gar_TextBox.Text, horas_pers_mes_TextBox.Text);
        }
        
        resultado = ctrlProyecto.AccionesAceptar(modificando, ("" == ID_TextBox.Text)? 0 : Convert.ToInt32(ID_TextBox.Text), Nombre_TextBox.Text, Convert.ToDateTime(Fecha_TextBox.Text), 
                                                            Convert.ToInt32(Prioridad_TextBox.Text), Convert.ToInt32(Lider_Select.Text), 
                                                            Convert.ToInt32(Cliente_Select.Text), Estado_DropDownList.Text,
                                                            Convert.ToInt32(Complejidad_Select.Text), ("" == GTIALB_TextBox.Text) ? 0 : Convert.ToInt32(GTIALB_TextBox.Text),
                                                            ("" == GTIGARM_TextBox.Text) ? 0 : Convert.ToInt32(GTIGARM_TextBox.Text), ("" == Prod_Hist_TextBox.Text) ? 0 : Convert.ToDouble(Prod_Hist_TextBox.Text),
                                                           ("" == Costo_TextBox.Text) ? 0 : Convert.ToInt32(Costo_TextBox.Text), ("" == Dur_Real_TextBox.Text) ? 0 : Convert.ToInt32(Dur_Real_TextBox.Text), descripcion_TextBox.Text, ("" == horas_pers_mes_TextBox.Text) ? 0 : Convert.ToDouble(horas_pers_mes_TextBox.Text));

       
        if (modificando)
        {
            if (!resultado)
            {
                Error_Label.Text = "Estado: ¡Error al Modifcar!";
                Error_Label.BackColor = System.Drawing.Color.IndianRed;
            }
            else
            {
                Error_Label.Text = "Estado: ¡Modificado!";
                Error_Label.BackColor = colorExito;
            }
            Activar_Desactivar_Opciones(permitidos.Consultado.Insertar, permitidos.Consultado.Modificar, permitidos.Consultado.Eliminar, permitidos.Consultado.Aceptar, permitidos.Consultado.Cancelar);

        }
        else
        {
            if (!resultado)
            {
                Error_Label.Text = "Estado: ¡Error al insertar!";
                Error_Label.BackColor = System.Drawing.Color.IndianRed;
            }
            else
            {
                Error_Label.Text = "Estado: ¡Insertado!!";
                Error_Label.BackColor = colorExito;
            }
            Activar_Desactivar_Opciones(permitidos.Defecto.Insertar, permitidos.Defecto.Modificar, permitidos.Defecto.Eliminar, permitidos.Defecto.Aceptar, permitidos.Defecto.Cancelar);
        }

        Activar_Desactivar_Campos(permitidos.Defecto.Campos);
        actualizarGrid();
        Lider_Select.ClearSelection();
        Lider_Select.Items.FindByText(lidertemp).Selected = true;
        Complejidad_Select.ClearSelection();
        Complejidad_Select.Items.FindByText(complejidadtemp).Selected = true;
        Cliente_Select.ClearSelection();
        Cliente_Select.Items.FindByText(clientetemp).Selected = true;
        Estado_DropDownList.ClearSelection();
        Estado_DropDownList.Text = estadotemp;
        
    }

    protected void Cancelar_Button_Click(object sender, EventArgs e)
    {

        
        if (modificando)
        {
            Error_Label.Text = "Estado: ¡Modificar Cancelado!";
            Error_Label.BackColor = System.Drawing.Color.IndianRed;
            Recuperar_Campos();
            Activar_Desactivar_Opciones(permitidos.Consultado.Insertar, permitidos.Consultado.Modificar, permitidos.Consultado.Eliminar, permitidos.Consultado.Aceptar, permitidos.Consultado.Cancelar);
            modificando = false;
            IteracionesDatos = ctrlProyecto.CargarIteraciones();
            Iteracion_DropDownList.DataSource = IteracionesDatos;
            Iteracion_DropDownList.DataBind();
            Iteracion_DropDownList.Items.Add(new ListItem("", (Iteracion_DropDownList.Items.Count + 1).ToString()));
            Iteracion_DropDownList.ClearSelection();
            Iteracion_DropDownList.Items.FindByText("").Selected = true;

            //revertir campos a los viejos!
        }
        else
        {
            Error_Label.Text = "Estado: ¡Insertar Cancelado!";
            Error_Label.BackColor = System.Drawing.Color.IndianRed;
            Limpiar_Campos();
            Activar_Desactivar_Opciones(permitidos.Defecto.Insertar, permitidos.Defecto.Modificar, permitidos.Defecto.Eliminar, permitidos.Defecto.Aceptar, permitidos.Defecto.Cancelar);
        }
        Activar_Desactivar_Campos(permitidos.Defecto.Campos);
        
    }


    protected void hum_Click(object sender, EventArgs e)
    {

        MultiView1.ActiveViewIndex = 0;
    }

    protected void est_Click(object sender, EventArgs e)
    {
        MultiView1.ActiveViewIndex = 1;
    }

    protected void rea_Click(object sender, EventArgs e)
    {
        MultiView1.ActiveViewIndex = 2;
    }



    protected void GridProyecto_SelectedIndexChanged(object sender, EventArgs e)
    {
        Error_Label.Text = "Estado: ¡Seleccionado!";
        Limpiar_Campos();
        Error_Label.BackColor = colorExito;

        ProyectoEnt proyecto;
        GridViewRow row = GridProyecto.SelectedRow;
        proyecto = ctrlProyecto.ConsultarProyecto(Convert.ToInt32(row.Cells[1].Text));
        Nombre_TextBox.Text = proyecto.Nombre;
        ID_TextBox.Text = proyecto.Id.ToString();
        Fecha_TextBox.Text = proyecto.FechaInicial.ToString();
        Prioridad_TextBox.Text = proyecto.Prioridad.ToString();
        CostoPF_TextBox.Text = proyecto.CostoXHora.ToString();
        Estado_DropDownList.Text = proyecto.Estado;
        Costo_TextBox.Text = proyecto.Costo.ToString();
        Lider_Select.Text = proyecto.Lider.ToString(); 

        Cliente_Select.Text = proyecto.Cliente.ToString();
        Dur_Real_TextBox.Text = proyecto.DuracionReal.ToString();
        GTIALB_TextBox.Text = proyecto.GtiAlbrecht.ToString();
        GTIGARM_TextBox.Text = proyecto.GtiGarmus.ToString();
        Prod_Hist_TextBox.Text = proyecto.ProductividadHistorica.ToString();
        Complejidad_Select.Text = proyecto.Complejidad.ToString();
        horas_pers_mes_TextBox.Text = proyecto.HorasPersonaMes.ToString();
        descripcion_TextBox.Text = proyecto.Descripcion.ToString();

        //Carga los empleados disponibles/asignados del proyecto
        Disponibles_ListBox.DataSource = ctrlProyecto.CargarEmpleadosDisponibles();
        Disponibles_ListBox.DataBind();
        Asignados_ListBox.DataSource = ctrlProyecto.CargarEmpleadosAsignados();
        Asignados_ListBox.DataBind();


        //Carga las iteraciones peretenecientes al proyecto
        IteracionesDatos = ctrlProyecto.CargarIteraciones();
        Iteracion_DropDownList.DataSource = IteracionesDatos; 
        Iteracion_DropDownList.DataBind();
        Iteracion_DropDownList.Items.Add(new ListItem("", (Iteracion_DropDownList.Items.Count + 1).ToString()));
        Iteracion_DropDownList.ClearSelection();
        Iteracion_DropDownList.Items.FindByText("").Selected = true;

        
        Activar_Desactivar_Opciones(permitidos.Consultado.Insertar, permitidos.Consultado.Modificar, permitidos.Consultado.Eliminar, permitidos.Consultado.Aceptar, permitidos.Consultado.Cancelar);
        Activar_Desactivar_Campos(permitidos.Consultado.Campos);
    }


    protected void Asignar_Button_Click(object sender, EventArgs e)
    {
        ctrlProyecto.EmpleadoDisponibleAAsignado(Convert.ToInt32(Disponibles_ListBox.SelectedValue));
        Asignados_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosAsignados();
        Asignados_ListBox.DataBind();
        Disponibles_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosPosibles();
        Disponibles_ListBox.DataBind();
    }


    protected void Remover_Button_Click(object sender, EventArgs e)
    {
        if (Asignados_ListBox.SelectedValue == Lider_Select.SelectedValue)
        {
            Lider_Select.ClearSelection();
            Lider_Select.Items.FindByText("").Selected = true;
        }
        ctrlProyecto.EmpleadoAsignadoADisponible(Convert.ToInt32(Asignados_ListBox.SelectedValue));
        Asignados_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosAsignados();
        Asignados_ListBox.DataBind();
        Disponibles_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosPosibles();
        Disponibles_ListBox.DataBind();
        
    }

    protected void Lider_Select_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Lider_Select.Text != "")
        {
            ctrlProyecto.EmpleadoDisponibleAAsignado(Convert.ToInt32(Lider_Select.SelectedValue));
            Asignados_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosAsignados();
            Asignados_ListBox.DataBind();
            Disponibles_ListBox.DataSource = ctrlProyecto.GetListaEmpleadosPosibles();
            Disponibles_ListBox.DataBind();
        }
        
    }
    protected void Iteracion_DropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Iteracion_DropDownList.SelectedItem.Text != "")
        {
            if(modificando && iterSelected != null)
            {
                ctrlProyecto.ModificarIteracionTemp(Iteracion_DropDownList.SelectedValue.ToString(), PFSA_Alb_TextBox.Text, PFSA_Gar_TextBox.Text, horas_pers_mes_TextBox.Text);
            }

            iterSelected = ctrlProyecto.CargarIteracion( Convert.ToInt32(Iteracion_DropDownList.SelectedValue) );
            
            PFSA_Alb_TextBox.Text = iterSelected.PfsaAlbrecht.ToString();
            PFSA_Gar_TextBox.Text = iterSelected.PfsaGarmus.ToString();
            PF_Alb_TextBox.Text = iterSelected.PfAlbrecht.ToString();
            PF_Gar_TextBox.Text = iterSelected.PfGarmus.ToString();
            Casp_Alb_TextBox.Text = iterSelected.CasperJonesAlb.ToString();
            Casp_TextBox.Text = iterSelected.CasperJonesGar.ToString();
            ISB_Alb_TextBox.Text = iterSelected.IsbgAlb.ToString();
            ISB_Gar_TextBox.Text = iterSelected.IsbgGar.ToString();
            Garmus_TextBox.Text = iterSelected.Garmus.ToString();
            Albrecht_TextBox.Text = iterSelected.Albrecht.ToString();
            Prod_Gar_Iter_TextBox.Text = iterSelected.ProductividadReal.ToString();
        }
    }

    protected void Estructuracion_Button_Click(object sender, EventArgs e)
    {
        Session["Proyecto"] = ID_TextBox.Text;
        Response.Redirect("Estructuracion.aspx");
    }
}
